﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Woobao.VO;

namespace Woobao.DAO
{
    public class UsuarioDAO
    {
        public VOUsuario Logar(string email, string senha)
        {
            using (DBWoobaoEntities banco = new DBWoobaoEntities())
            {
                var query = from usu in banco.TBUsuarios
                            where
                           usu.Email == email && usu.Senha == senha
                            select usu;

                TBUsuario usuario = query.SingleOrDefault(); ///SingleOrDefault == Se não encontrar ninguem, retorna nulo
                if (usuario == null)
                    return null;
                else
                    return ConverterParaVO(usuario);
            }
        }

        public void Inserir(VOUsuario obj)
        {
            TBUsuario usu = ConverterParaBanco(obj);
            using (DBWoobaoEntities banco = new DBWoobaoEntities())
            {
                banco.TBUsuarios.Add(usu);
                banco.SaveChanges();
            }
        }



        TBUsuario ConverterParaBanco(VOUsuario vo)
        {
            TBUsuario tb = new TBUsuario();
            tb.IDUsuario = vo.Codigo;
            tb.Nome = vo.Nome;
            tb.Senha = vo.Senha;
            tb.STAdministrador = vo.Status;
            tb.Time = vo.Time;
            tb.Email = vo.Email;

            return tb;
        }

        VOUsuario ConverterParaVO(TBUsuario tb)
        {
            VOUsuario vo = new VOUsuario();

            vo.Codigo = tb.IDUsuario;
            vo.Nome = tb.Nome;
            vo.Senha = tb.Senha;
            vo.Status = tb.STAdministrador;
            vo.Time = tb.Time;
            vo.Email = tb.Email;

            return vo;
        }

        public List<VOUsuario> Consultar(VOUsuario filtro)
        {
            using (DBWoobaoEntities banco = new DBWoobaoEntities())
            {
                var query = from u in banco.TBUsuarios
                            where
                                 (u.Nome.Contains(filtro.Nome) || filtro.Nome == null) ///Contains = like
                                      &&
                                      (u.IDUsuario == filtro.Codigo || filtro.Codigo == 0)
                            select u;

                List<TBUsuario> lista = query.ToList();

                List<VOUsuario> listaRetorno = new List<VOUsuario>();

                foreach (var item in lista)
                {
                    listaRetorno.Add(ConverterParaVO(item));
                }
                return listaRetorno;
            }

        }

        public void Atualizar(VOUsuario obj)
        {
            using (DBWoobaoEntities banco = new DBWoobaoEntities())
            {
                TBUsuario usu = banco.TBUsuarios.Where(q => q.IDUsuario == obj.Codigo).Single();//buscando pelo código e pegando o único
                usu.Nome = obj.Nome;
                usu.Time = obj.Time;
                usu.Email = obj.Email;

                banco.SaveChanges();
            }
        }

        public void Excluir(int codigo)
        {
            using (DBWoobaoEntities banco = new DBWoobaoEntities())
            {
                TBUsuario usu = banco.TBUsuarios.Where(q => q.IDUsuario == codigo).Single();
                banco.TBUsuarios.Remove(usu);

                banco.SaveChanges();
            }
        }
    }
}
